/***
 * 对给定的有N个节点（N>=0）的二叉树，求叶节点元素之和。

输入格式:
第一行是一个非负整数N，表示有N个节点

第二行是一个整数k，是树根的元素值

接下来有N-1行，每行是一个新节点，格式为 r d e 三个整数，

r表示该节点的父节点元素值（保证父节点存在）；d是方向，0表示该节点为父节点的左儿子，1表示右儿子；e是该节点的元素值。

输出格式:
树中叶节点元素之和 （保证在整型变量范围之内）。

输入样例:
fig.jpg

对于图片中的二叉树：

3
20
20 0 10
20 1 25
结尾无空行
输出样例:
35
***/

#include "stdio.h"
#include "stdlib.h"
typedef struct biTree{
    int data;
    struct biTree *lchild,*rchild;
}*BiTree,Node;
typedef struct nodeList{
    Node * node;
    struct nodeList *next;
}Nodes;

int main(int argc, char const *argv[])
{
    int N,k,i,j,r,d,e,result=0;
    BiTree t;
    Node *parent,*cur;
    Nodes *head=NULL,*tmp;
    // freopen("d:\\a.txt","r",stdin);
    scanf("%d",&N);
    scanf("%d",&k);
    t=(Node *)malloc(sizeof(Node));
    t->data=k;
    t->lchild=t->rchild=NULL;
    tmp=(Nodes *)malloc(sizeof(Nodes));
    tmp->node=t;
    tmp->next=head;
    head=tmp;
    for(i=1;i<N;i++){
        scanf("%d %d %d",&r,&d,&e);
        //在链表中查找父节点
        tmp=head;
        while(tmp)if(tmp->node->data==r)break;else tmp=tmp->next;
        parent=tmp->node;
        //将当前结点链入父节点
        cur = (Node *)malloc(sizeof(Node));
        cur->data=e;
        cur->lchild=cur->rchild=NULL;
        if(d==0)parent->lchild=cur;
        else parent->rchild=cur;
        //更新链表
        tmp = (Nodes *)malloc(sizeof(Nodes));
        tmp->node = cur;
        tmp->next = head;
        head = tmp;
    }
    //遍历链表
    tmp=head;
    while(tmp){
        if(tmp->node->lchild==NULL&&tmp->node->rchild==NULL)result+=tmp->node->data;
        tmp=tmp->next;
    }
    printf("%d\n",result);
    return 0;
}
